// 1.确定基本机构以及依赖库：
// - axios: 用于发送请求的库
// - nprogress: 页面顶部进度条效果的库
// - nprogress.css: 进度条样式库
// 2.创建axios实例：配置HTTP请求的默认设置
// - baseURL: 基础URL
// - timeout: 请求超时时间
// 3.请求拦截器 request.interceptors.request.use(config)=> {
//     config是 axios 的请求配置对象
//     token是JWT (JSON Web Token) 格式的认证凭证
//     如果 token 存在，则在请求头中添加 Authorization 字段，值为 token
//     let token = sessionStorage.getItem('token')
//     nProgress.start()
//     if(token) {
//         config.headers.["Authorization"] = `Bearer` + token;
//     }
//     return config;
// }
// 4.响应拦截器 request.interceptors.response.use(response)=> {
//     成功响应处理
//     1.隐藏进度条
//     2.检查HTTP状态码，如果不是200，则提示错误信息
//     3.返回响应对象
//     错误处理
//     1.隐藏进度条
//     2.提示错误信息
//     3.返回错误对象
//     (res) => {
//     NProgress.done();
//     if(res.status!==200){
//       // 错误处理...
//     }
//     return res;
//   },
//   (err) => {
//     // 错误处理...
//   }
// );
import { message } from "antd";
import axios from "axios";
// 添加加载提示
import NProgress from "nprogress";
import 'nprogress/nprogress.css'
// 先设置进度条为隐藏
NProgress.configure({ showSpinner: false });

const request = axios.create({
     baseURL: "http://dida100.com:8888",
     timeout: 5000,
});

// 请求拦截器
request.interceptors.request.use((config) => {
  let token = sessionStorage.getItem("token");
  NProgress.start();
  if (token) {
    config.headers["Authorization"] = "Bearer " + token;
  }
  return config;
}, (error) => {
  // 请求错误处理
  NProgress.done();
  return Promise.reject(error);
});

// 响应拦截器
request.interceptors.response.use(
  (res) => {
    NProgress.done();
    if(res.status !== 200){
      // 没有请求成功
      if (res.status === 401) {
        // 没有权限
        message.info("没有权限");
      } else if (res.status === 500 || res.status === 505) {
        message.info("服务器错误");
      } else if (res.status === 404) {
        message.info("404找不到请求地址");
      } else {
        message.info("请求错误");
      }
    }
    return res;
  },
  (err) => {
    NProgress.done();
    message.info("请求错误");
    console.error(err);
    return Promise.reject(err);
  }
);

export default request;

